package ec.linde.modulos.proyectos.servicio.impl;

import java.math.BigDecimal;
import java.util.List;
import java.util.Map;

import javax.ejb.EJB;
import javax.ejb.Stateless;

import ec.linde.enumeraciones.Estado;
import ec.linde.modulos.dao.DetallePlanillaClienteDao;
import ec.linde.modulos.dao.PlanillaClienteDao;
import ec.linde.modulos.proyectos.servicio.ServicioPlanillaCliente;
import ec.linde.persistencia.entidades.ProdConceptos;
import ec.linde.persistencia.entidades.ProdPartidaDetalle;
import ec.linde.persistencia.entidades.proyectos.DetallePlanillaCliente;
import ec.linde.persistencia.entidades.proyectos.PlanillaCliente;
import ec.linde.persistencia.entidades.proyectos.Rdo;

/**
 * TODO: Agregar descripcion
 * 
 * @FechaCreacion: 29/09/2014
 * @author: Alex Carrillo
 * @FechaModificacion: 29/09/2014
 * @author: Alex Carrillo
 * @version: 1.0
 */
@Stateless
public class ServicioPlanillaClienteImpl implements ServicioPlanillaCliente {

	@EJB
	private PlanillaClienteDao planillaClienteDao;
	@EJB
	private DetallePlanillaClienteDao detallePlanillaClienteDao;

	/*
	 * (non-Javadoc)
	 * 
	 * @see ec.linde.modulos.proyectos.servicio.ServicioProdProyecto#guardar(ec.linde .persistencia.entidades.proyectos.ProdProyecto)
	 */
	@Override
	public void guardar(PlanillaCliente planillaContratista) {
		for (DetallePlanillaCliente detallePlanillaCliente : planillaContratista.getListaDetallePlanillaCliente()) {
			detallePlanillaClienteDao.guardar(detallePlanillaCliente);
		}
		planillaClienteDao.guardar(planillaContratista);
	}

	/*
	 * (non-Javadoc)
	 * 
	 * @see ec.linde.modulos.proyectos.servicio.ServicioProdProyecto#eliminar(ec. linde.persistencia.entidades.proyectos.ProdProyecto)
	 */
	@Override
	public void eliminar(PlanillaCliente planillaContratista) {
		planillaClienteDao.eliminar(planillaContratista);
	}

	/*
	 * (non-Javadoc)
	 * 
	 * @see ec.linde.modulos.proyectos.servicio.ServicioProdProyecto#buscarPorId(int)
	 */
	@Override
	public PlanillaCliente buscarPorId(int proyId) {
		return planillaClienteDao.buscarPorId(proyId);
	}

	/*
	 * (non-Javadoc)
	 * 
	 * @see ec.linde.modulos.proyectos.servicio.ServicioProdProyecto# obtenerListaPorPagina(int, int, java.lang.String, boolean, java.util.Map)
	 */
	@Override
	public List<PlanillaCliente> obtenerListaPorPagina(int startIndex, int pageSize, String sortField, boolean sortOrder, Map<String, String> filters) {
		return planillaClienteDao.obtenerListaPorPagina(startIndex, pageSize, sortField, sortOrder, filters);
	}

	/*
	 * (non-Javadoc)
	 * 
	 * @see ec.linde.modulos.proyectos.servicio.ServicioProdProyecto#obtenerListaCombo (java.lang.String, boolean, java.util.Map)
	 */
	@Override
	public List<PlanillaCliente> obtenerListaCombo(String sortField, boolean sortOrder, Map<String, String> filters) {
		return planillaClienteDao.obtenerListaCombo(sortField, sortOrder, filters);
	}

	/*
	 * (non-Javadoc)
	 * 
	 * @see ec.linde.modulos.proyectos.servicio.ServicioProdProyecto#contarPorCriterio (java.util.Map)
	 */
	@Override
	public int contarPorCriterio(Map<String, String> filters) {
		return planillaClienteDao.contarPorCriterio(filters);
	}

	/*
	 * (non-Javadoc)
	 * 
	 * @see ec.linde.modulos.proyectos.servicio.ServicioProdProyecto#cargarDetalle (int)
	 */
	@Override
	public PlanillaCliente cargarDetalle(int proyId) {
		return planillaClienteDao.cargarDetalle(proyId);
	}

	/*
	 * (non-Javadoc)
	 * 
	 * @see ec.linde.modulos.proyectos.servicio.ServicioPlanOperativo#cambiarEstado(int, ec.linde.enumeraciones.Estado)
	 */
	@Override
	public void cambiarEstado(int idPlanillaCliente, Estado estado) {
		planillaClienteDao.cambiarEstado(idPlanillaCliente, estado);

	}

	/*
	 * (non-Javadoc)
	 * 
	 * @see ec.linde.modulos.proyectos.servicio.ServicioPlanillaContratista#cantidadPlanillaAnterior(ec.linde.persistencia.entidades.proyectos.Rdo,
	 * ec.linde.persistencia.entidades.ProdPartidaDetalle, ec.linde.persistencia.entidades.ProdConceptos)
	 */
	@Override
	public BigDecimal cantidadPlanillaAnterior(Rdo rdo, ProdPartidaDetalle partida, ProdConceptos concepto) {
		return planillaClienteDao.cantidadPlanillaAnterior(rdo, partida, concepto);
	}

	@Override
	public void totalizar(PlanillaCliente planillaCliente) {

		for (DetallePlanillaCliente detallePlanillaCliente : planillaCliente.getListaDetallePlanillaCliente()) {
			if (!detallePlanillaCliente.isEliminado()) {
				detallePlanillaCliente.setCantidadTotal(detallePlanillaCliente.getCantidadAnterior().add(detallePlanillaCliente.getCantidadActual()));
			}
		}

	}

}
